{
  "jsonrpc": "2.0",
  "id": 0,
  "method": "initialize",
  "params": {
    "processId": 123,
    "rootPath": "clangd",
    "capabilities": { "window": { "workDoneProgress": true, "implicitWorkDoneProgressCreate": true} },
    "trace": "off"
  }
}
---
{
  "jsonrpc": "2.0",
  "method": "textDocument/didOpen",
  "params": {
    "textDocument": {
      "uri": "file://DIRECTORY/bar.cpp",
      "languageId": "cpp",
      "version": 1,
      "text": "#include \"sub_dir/foo.h\"\nint main(){\nreturn foo();\n}"
    }
  }
}
# BUILD:      "method": "$/progress"
# BUILD-NEXT: "params": {
# BUILD-NEXT:   "token": "backgroundIndexProgress",
# BUILD-NEXT:   "value": {
# BUILD-NEXT:     "kind": "begin",
# BUILD-NEXT:     "percentage": 0,
# BUILD-NEXT:     "title": "indexing"
# BUILD-NEXT:   }
# BUILD-NEXT: }
# BUILD:      "method": "$/progress"
# BUILD-NEXT: "params": {
# BUILD-NEXT:   "token": "backgroundIndexProgress",
# BUILD-NEXT:   "value": {
# BUILD-NEXT:     "kind": "report",
# BUILD-NEXT:     "message": "0/1",
# BUILD-NEXT:     "percentage": 0
# BUILD-NEXT:   }
# BUILD-NEXT: }
#    later...
# BUILD:          "message": "1/2",
# BUILD-NEXT:     "percentage": 50
#    finally...
# BUILD:          "kind": "end"
# when using the index, we spawn one task to read it, but not more.
# USE-NOT:        "message": "1/2",
---
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "sync",
  "params": null
}
---
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "textDocument/definition",
  "params": {
    "textDocument": {
      "uri": "file://DIRECTORY/bar.cpp"
    },
    "position": {
      "line": 2,
      "character": 8
    }
  }
}
# CHECK: "uri": "file://{{.*}}/foo.cpp"
---
{"jsonrpc":"2.0","id":3,"method":"shutdown"}
---
{"jsonrpc":"2.0","method":"exit"}
